﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Persistencia_y_capa_de_negocio;
using System.Collections;

namespace clonegame
{
    public partial class formularioBienvenida : UserControl
    {
        private ArrayList lista;

        private static readonly formularioBienvenida instancia = new formularioBienvenida();
        public static formularioBienvenida Instancia
        {
            get { return instancia; }
        }

        private int rowsPaginas;
        public int RowsPaginas
        {
            get { return rowsPaginas; }
            set { rowsPaginas = value; }
        }

        private int pagina;
        public int Pagina
        {
            get { return pagina; }
            set { pagina = value; }
        }

        public formularioBienvenida()
        {
            InitializeComponent();
            pagina = 1;
            rowsPaginas = 10;
        }

        private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            formularioMaestro.Instancia.CambiarSeccion("noticias",false);
            
        }

        private void Bienvenida_Load(object sender, EventArgs e)
        {
            RellenaDGV(pagina, rowsPaginas);
        }

        public void RellenaDGV(int pagina, int tamano)
        {
            lista = CADActividad.Instancia.getActividades();
            dgvActividadReciente.Rows.Clear();
            string mdf = Application.ExecutablePath;
            mdf = mdf.Remove(mdf.LastIndexOf(@"\bin\"));

            string mdf2 = mdf.Remove(mdf.LastIndexOf(@"\clonegame"));
            mdf2 += @"\clonegame\imagenes\actividad\";

            dgvActividadReciente.Rows.Add(lista.Count);
            int i = lista.Count - 1;
            foreach (ENActividad a in lista)
            {
                dgvActividadReciente.Rows[i].Height = 25;
                dgvActividadReciente.Rows[i].Cells[0].Value = a.Fecha;
                

                try
                {
                    dgvActividadReciente.Rows[i].Cells[1].Value = System.Drawing.Image.FromFile(mdf2 + a.Accion + ".png");
                }
                catch (Exception)
                {
                    dgvActividadReciente.Rows[i].Cells[1].Value = clonegame.Properties.Resources.iconoLogin;
                }

                dgvActividadReciente.Rows[i].Cells[2].Value = a.Accion;
                dgvActividadReciente.Rows[i].Cells[3].Value = a.Responsable;
                dgvActividadReciente.Rows[i].Cells[4].Value = a.Descripcion;
                i--;
            }

            dgvActividadReciente.Sort(dgvActividadReciente.Columns[0], ListSortDirection.Descending);
        }

        /// <summary>
        /// Actualiza los campos de bienvenida.
        /// </summary>
        public void actualizaResumen()
        {
            try
            {
                string nombreUsuario = formularioMaestro.Instancia.UsuarioLogueado.CuentaAd;
                int nivelUsuario = formularioMaestro.Instancia.UsuarioLogueado.Nivel;

                // Generamos el mensaje de bienvenida.
                labelMensaje.Text = "Bienvenido ";
                labelMensaje.Text += nombreUsuario;
                labelMensaje.Text += ". ";
                
                // Array de posibles mensajes a emitir.
                ArrayList mensajes = new ArrayList();

                // Comprobamos qué mensajes se pueden mostrar.
                // Estos mensajes dependen del nivel del usuario y del estado de la BD.

                // Está utilizando la cuenta root y no se ha creado ningún administrador, quizá quiera crear uno.
                if (nivelUsuario == 0) // Comprobamos que tiene privilegios.
                {
                    if (CADAdmin.Instancia.getNumAdmins(1) == 0) // Comprobamos que se cumple la condición.
                    {
                        mensajes.Add("Está utilizando la cuenta root y no existe ningún administrador, quizá quiera crear uno.");
                    }
                }

                // No existe ningún moderador, quizá quiera crear uno.
                if (nivelUsuario == 0 || nivelUsuario == 1) // Comprobamos que tiene privilegios.
                {
                    if (CADAdmin.Instancia.getNumAdmins(2) == 0) // Comprobamos que se cumple la condición.
                    {
                        mensajes.Add("No existe ningún moderador, quizá quiera crear uno.");
                    }
                }

                // No existe ningún editor, quizá quiera crear uno.
                if (nivelUsuario == 0 || nivelUsuario == 1) // Comprobamos que tiene privilegios.
                {
                    if (CADAdmin.Instancia.getNumAdmins(3) == 0) // Comprobamos que se cumple la condición.
                    {
                        mensajes.Add("No existe ningún editor, quizá quiera crear uno.");
                    }
                }

                // No se ha editado la configuración del juego.
                if (nivelUsuario == 0 || nivelUsuario == 1) // Comprobamos que tiene privilegios.
                {
                    // Necesario un campo en la BD que indique si se ha modificado alguna vez la configuración del juego.
                    // También se podría hacer una select del número de actividades de edición de configuración y comprobar que sea mayor que 0.
                }

                // No existe ningún recurso, quizá quiera ser el primero en añadir uno.
                if (nivelUsuario == 0 || nivelUsuario == 1 || nivelUsuario == 2) // Comprobamos que tiene privilegios.
                {
                    if (CADRecurso.Instancia.getNumRecursos() == 0) // Comprobamos que se cumple la condición.
                    {
                        mensajes.Add("No existe ningún recurso, quizá quiera ser el primero en añadir uno.");
                    }
                    else
                    {
                        // No se ha dado de alta ningún recurso hoy o en los últimos x días.
                    }
                }

                // No existe ninguna unidad, quizá quiera ser el primero en añadir una.
                if (nivelUsuario == 0 || nivelUsuario == 1 || nivelUsuario == 2) // Comprobamos que tiene privilegios.
                {
                    if (CADUnidad.Instancia.getNumUnidades() == 0) // Comprobamos que se cumple la condición.
                    {
                        mensajes.Add("No existe ninguna unidad, quizá quiera ser el primero en añadir una.");
                    }
                    else
                    {
                        // No se ha dado de alta ninguna unidad hoy o en los últimos x días.
                    }
                }

                // No existe ningún edificio, quizá quiera ser el primero en añadir uno.
                if (nivelUsuario == 0 || nivelUsuario == 1 || nivelUsuario == 2) // Comprobamos que tiene privilegios.
                {
                    if (CADEdificio.Instancia.getNumEdificios() == 0) // Comprobamos que se cumple la condición.
                    {
                        mensajes.Add("No existe ningún recurso, quizá quiera ser el primero en añadir uno.");
                    }
                    else
                    {
                        // No se ha dado de alta ningún edificio hoy o en los últimos x días.
                    }
                }

                // No existe ninguna noticia, quizá quiera ser el primero en añadir una.
                if (nivelUsuario == 0 || nivelUsuario == 1 || nivelUsuario == 3) // Comprobamos que tiene privilegios.
                {
                    if (CADNoticia.Instancia.getNumNoticias() == 0) // Comprobamos que se cumple la condición.
                    {
                        mensajes.Add("No existe ninguna noticia, quizá quiera ser el primero en añadir una.");
                    }
                    else
                    {
                        // No se ha dado de alta ninguna noticia hoy o en los últimos x días.
                    }
                }


                // Seleccionamos un mensaje aleatoriamente.
                if (mensajes.Count > 0)
                {
                    Random r = new Random(DateTime.Now.Millisecond);
                    labelMensaje.Text += mensajes[r.Next(mensajes.Count)];
                }

                // Completamos la información del resumen.
                labelNumAdministradores.Text = CADAdmin.Instancia.getNumAdmins(1).ToString();
                labelNumModeradores.Text = CADAdmin.Instancia.getNumAdmins(2).ToString();
                labelNumEditores.Text = CADAdmin.Instancia.getNumAdmins(3).ToString();
                labelNumUsuarios.Text = CADUsuario.Instancia.getNumUsuarios().ToString();

                labelUltimoAdministrador.Text = CADAdmin.Instancia.getUltimo(1);
                labelUltimoModerador.Text = CADAdmin.Instancia.getUltimo(2); 
                labelUltimoEditor.Text = CADAdmin.Instancia.getUltimo(3);
                labelUltimoUsuario.Text = CADUsuario.Instancia.getUltimo();

                labelNumRecursos.Text = CADRecurso.Instancia.getNumRecursos().ToString();
                labelNumUnidades.Text = CADUnidad.Instancia.getNumUnidades().ToString();
                labelNumEdificios.Text = CADEdificio.Instancia.getNumEdificios().ToString();
                labelNumNoticias.Text = CADNoticia.Instancia.getNumNoticias().ToString();

                RellenaDGV(0,0);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void btVerTodaActividad_Click(object sender, EventArgs e)
        {
            formularioMaestro.Instancia.CambiarSeccion("actividad",false);
        }
    }
}
